package com.java.searchSort;


import java.util.Arrays;

/**
 * 插值查找算法的核心：int mid = left + (right - left) * (findValue - arr[left]) / (arr[right] - arr[left]);
 * 效率比二分查找高
 */
public class InsertValueSearch {

    public static void main(String[] args) {


        int[] arr = new int[100];
        for (int i = 0; i <100; i++) {
            arr[i] = i+1;
        }

//        System.out.println(Arrays.toString(arr));


        int i = insertValueSearch(arr, 0, arr.length - 1, 36);

        System.out.println("下标index为："+i);


    }


    /**
     * 编写插值查找算法
     * 插值算法也要求数组是有序的
     * @param arr：数组
     * @param left：左边索引
     * @param right：右边索引
     * @param findValue：要查找的值
     * @return
     */
    public static int insertValueSearch(int[] arr,int left ,int right , int findValue){

        System.out.println("查找的次数输出的几次");


        //这个条件必须需要，否则得到的mid可能越界
        if (left > right || findValue < arr[0] || findValue > arr[arr.length-1]){
            return -1;
        }

        //求出mid
        int mid = left + (right - left) * (findValue - arr[left]) / (arr[right] - arr[left]);
        //中间的值
        int midValue = arr[mid];

        if (findValue > midValue){
            //向右，左边的索引 left=mid+1
            return insertValueSearch(arr , mid+1 , right , findValue);
        }else if (findValue < midValue){
            //向左
            return insertValueSearch(arr , left , mid-1 , findValue);
        }else {
            //找到了
            return mid;
        }


    }





}
